package com.sy.core.util;

import com.sy.core.model.SysUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 使用RedisTemplate操作Redis对数据进行处理
 * @Author :Chong.CaiXin
 * @Description :
 * @Date : Created in 18:12 2018/8/21
 */
public class RedisUtil {

    /**
     * redis管理用户登录信息 有效时间一小时
     *
     * @param template
     * @param user
     * @return
     */

    public static boolean setToRedis(RedisTemplate<Object, Object> template, SysUser user) {
        try {
            template.opsForValue().set(SysConst.REDIS_USER_SESSION_KEY + user.getPk(), user,1000*60*60*24*365, TimeUnit.MILLISECONDS);
            return true;
        }catch(Exception e){
            return false;
        }
    }

    /**
     * 将信息放入redis
     * @param template
     * @param key  用于获取数据的关键key
     * @param omap 存放的数据
     * @param maxTime 数据有效时间  1000*60*60 单位毫秒
     * @return
     */
    public static boolean set(RedisTemplate<Object, Object> template,String key,Map omap,Integer maxTime) {
        try {
            template.opsForValue().set(key, omap,maxTime, TimeUnit.MILLISECONDS);
            return true;
        }catch(Exception e){
            return false;
        }
    }

    /**
     * 从redis中获取数据
     * @param template
     * @param key 获取数据的key
     * @return
     */
    public static Map get(RedisTemplate<Object, Object> template, String key) {
        try {
            Map result = null;
            if (StringUtils.isNotBlank(key) && template != null) {
                result = (Map)template.opsForValue().get(key);
            }
            return result;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取redis中用户信息
     * @param template
     * @param userId
     * @return
     */
    public static SysUser getFormRedis(RedisTemplate<Object, Object> template, String userId) {
        try {
            SysUser result = null;
            if (StringUtils.isNotBlank(userId) && template != null) {
                result = (SysUser) template.opsForValue().get(SysConst.REDIS_USER_SESSION_KEY + userId);
            }
            return result;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * redis管理验证码 15分钟内有效
     *
     * @param template
     * @param hm
     * @param phone
     * @return
     */
    public static boolean setValidationCodeToRedis(RedisTemplate<Object, Object> template, String phone, HashMap<Object, Object> hm) {
        try {
            template.opsForValue().set(SysConst.REDIS_USER_VALIDATIONCODE_KEY + phone, hm, 1000 * 60 * 15, TimeUnit.MILLISECONDS);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 获取redis中指定类型的验证码
     * @param template
     * @param userPhone
     * @return
     */
    public static HashMap<Object, Object> getValidationCodeFormRedis(RedisTemplate<Object, Object> template, String userPhone) {
        HashMap<Object, Object> result = null;
        if (StringUtils.isNotBlank(userPhone)) {
            result = (HashMap<Object, Object>) template.opsForValue().get(SysConst.REDIS_USER_VALIDATIONCODE_KEY + userPhone);
        }
        return result;
    }

    /**
     * 清空登录信息
     * @param template
     * @param user
     * @return
     */
    public static boolean clenUserInfo(RedisTemplate<Object, Object> template, SysUser user) {
        try {
            template.delete(SysConst.REDIS_USER_SESSION_KEY + user.getPk());
            return true;
        }catch(Exception e){
            return false;
        }
    }
}
